home *** CD-ROM | disk | FTP | other *** search
- /*****
- * flApp.c
- *
- * Application methods for a typical application.
- *
- * Copyright © 1990 Symantec Corporation. All rights reserved.
- *
- *****/
-
- #include "flApp.h"
- #include "flash.h"
- #include "CBartender.h"
- #include "BGetTCLInfo.h"
- #include "BDisplayOutput.h"
- #include "size_t.h"
- #include "string.h"
-
- extern CBartender *gBartender;
- extern OSType gSignature;
-
- #define kExtraMasters 4
- #define kRainyDayFund 20480
- #define kCriticalBalance 20480
- #define kToolboxBalance 20480
-
-
- /***
- * IStarterApp
- *
- * Initialize the application. Your initialization method should
- * at least call the inherited method. If your application class
- * defines its own instance variables or global variables, this
- * is a good place to initialize them.
- *
- ***/
-
- void flApp::IflApp(void)
-
- {
- CApplication::IApplication( kExtraMasters, kRainyDayFund,
- kCriticalBalance, kToolboxBalance);
-
-
- /* The parameters to IApplication are the number of times to call
- MoreMasters, the total number of bytes of heap space to reserve for
- monitoring low memory situations, and the portion of the memory
- reserve to set aside for critical operations and toolbox calls.
-
- Four (4) is a reasonable number of MoreMasters calls,
- but you should determine a good number for your application
- by observing the heap using Lightsbug,
- TMON, or Macsbug. Set this parameter to zero, give your
- program a rigorous work-out, then look at the heap and count
- how many master pointer blocks have been allocated. Master
- pointer blocks are nonrelocatable and have a size of $100
- (hex). You should call MoreMasters at least this many
- times -- add a few extra just to be safe. The purpose of all
- this preflighting is to prevent heap fragmentation. You
- don't want the Memory Manager to call MoreMasters and
- create a nonrelocatable block in the middle of your heap. By
- calling MoreMasters at the very beginning of the program,
- you ensure that these blocks are allocated in a group at the
- bottom of the heap.
-
- The memory reserve is a safeguard for handling low memory
- conditions and is used by the GrowMemory method in
- CApplication (check there for more comments). In general,
- your program should never request a memory block greater
- than this reserve size without explicitly checking in
- advance whether there is enough free memory to satisfy the
- the request.
-
- */
-
- }
-
-
-
- /***
- * SetUpFileParameters
- *
- * In this routine, you specify the kinds of files your
- * application opens.
- *
- *
- ***/
-
- void flApp::SetUpFileParameters(void)
-
- {
- inherited::SetUpFileParameters(); /* Be sure to call the default method */
-
- /**
- ** sfNumTypes is the number of file types
- ** your application knows about.
- ** sfFileTypes[] is an array of file types.
- ** You can define up to 4 file types in
- ** sfFileTypes[].
- **
- **/
-
- sfNumTypes = 1;
- sfFileTypes[0] = 'TEXT';
-
- /**
- ** Although it's not an instance variable,
- ** this method is a good place to set the
- ** gSignature global variable. Set this global
- ** to your application's signature. You'll use it
- ** to create a file (see CFile::CreateNew()).
- **
- **/
-
- gSignature = '????';
- }
-
-
- /***
- * SetUpMenus
- *
- * Set up menus which must be created at run time, such as a
- * Font menu. You can eliminate this method if your application
- * does not have any such menus.
- *
- ***/
-
- void flApp::SetUpMenus()
- {
-
- inherited::SetUpMenus(); /* Superclass takes care of adding
- menus specified in a MBAR id = 1
- resource
- */
-
- /* Add your code for creating run-time menus here */
- }
-
-
-
- /***
- * DoCommand
- *
- * Your application will probably handle its own commands.
- * Remember, the command numbers from 1-1023 are reserved.
- * The file Commands.h contains all the predefined TCL
- * commands.
- *
- * Be sure to call the default method, so you can get
- * the default behvior for standard commands.
- *
- ***/
- void flApp::DoCommand(long theCommand)
-
- {
- switch (theCommand) {
-
- /* Your commands go here */
-
- default: inherited::DoCommand(theCommand);
- break;
- }
- }
-
-
- /***
- *
- * UpdateMenus
- *
- * Perform menu management tasks
- *
- ***/
-
- void flApp::UpdateMenus()
- {
- inherited::UpdateMenus(); /* Enable standard commands */
-
- /* Enable the commands handled by your Application class */
- }
-
-
- /***
- * Exit
- *
- * Chances are you won't need this method.
- * This is the last chance your application gets to clean up
- * things like temporary files before terminating.
- *
- ***/
-
- void flApp::Exit()
-
- {
- /* your exit handler here */
- }
-
-
- /***
- * CreateDocument
- *
- * The user chose New from the File menu.
- * In this method, you need to create a document and send it
- * a NewFile() message.
- *
- ***/
-
- void flApp::CreateDocument()
-
- {
- }
-
- /***
- * OpenDocument
- *
- * The user chose Open… from the File menu.
- * In this method you need to create a document
- * and send it an OpenFile() message.
- *
- * The macSFReply is a good SFReply record that contains
- * the name and vRefNum of the file the user chose to
- * open.
- *
- ***/
-
- void flApp::OpenDocument(SFReply *macSFReply)
-
- {
- }
-
- /********************************************************
- * XcmdRun()
- *
- * Entry method.
- *
- *******************************************************/
-
- void flApp::XcmdRun(void)
- {
- XCmdPtr paramPtr;
- char returnStr[1024];
-
- paramPtr = (XCmdPtr)NewPtr(136L); // Size of XCmdBlock.
- GetParams(returnStr);
-
- FillParamPtr(paramPtr, returnStr);
- FlashMain(paramPtr);
-
- DumpData(paramPtr->returnValue);
- // A real program would dispose of paramPtr and its handles
- // at this point.
- }
-
- /**********************************************************
- * GetParams()
- *
- * Get the information for input into the HyperCard parameters.
- *
- **********************************************************/
-
- void flApp::GetParams(char *paramStr)
- {
- #define DLOGinfo 601 // Resource ID for DLOG template
-
- BGetTCLInfo *theDocument = NULL;
- Rect boxDescription;
-
- SetRect(&boxDescription, 20, 20, 260, 60);
-
- theDocument = new(BGetTCLInfo);
- theDocument->IBGetTCLInfo(DLOGinfo, this);
- theDocument->GetInfo("CSort Input Line", paramStr);
- theDocument->Dispose();
- }
-
- /************************************************************
- * FillParamPtr()
- *
- * Prepare the paramRec.
- *
- ************************************************************/
-
- void flApp::FillParamPtr(XCmdPtr paramPtr, char *paramStr)
- {
- short count = 0;
- size_t theLength;
- char *tempPtr, *tokenPtr;
- char tokenStr[256];
-
- tempPtr = paramStr;
- while (*tempPtr != 0x00)
- {
- tokenPtr = (char*)&tokenStr;
- if (*tempPtr == 0x22)
- {
- ++tempPtr;
- while (*tempPtr != 0x22)
- {
- *tokenPtr = *tempPtr;
- ++tempPtr;
- ++tokenPtr;
- }
- ++tempPtr;
- if (*tempPtr == 0x2C)
- ++tempPtr;
- }
- else
- {
- while (*tempPtr != 0x2C)
- {
- *tokenPtr = *tempPtr;
- ++tempPtr;
- ++tokenPtr;
- }
- ++tempPtr;
- }
- *tokenPtr = 0x00;
- theLength = strlen(tokenStr);
- paramPtr->params[count] = NewHandle(theLength + 1);
- strcpy((char*)*(paramPtr->params[count]), tokenStr);
- ++count;
- }
- paramPtr->paramCount = count;
- }
-
- /************************************************************
- * DumpData()
- *
- * Display data returned by the XCMD.
- *
- ************************************************************/
-
- void flApp::DumpData(Handle theData)
- {
- BDisplayOutput *theOutput;
-
- gBartender->DisableMenuBar();
- theOutput = new BDisplayOutput;
- theOutput->IBDisplayOutput(this, TRUE);
- theOutput->DisplayRun(theData);
- theOutput->Dispose();
- }
-
-